<?php
class LiquidacionsController extends AppController 
{
	var $name = 'Liquidacions';
	var $layout =  "ajax";
	var $components = array('Interfaz','Vista','Listas');
	var $helpers = array('Interfaz','Vista','Ayuda');
	var $uses = array('Liquidacion','Productor','Silo','Rubro','Subsidio','Deuda','Relacion','Forma','Banco','Pago','Boleta');

	public function beforeFilter(){
  		$this->validar();
  	}
  	
 	function index(){
 	}

 	public function listado_liquidacion($busq=null){	
		$busq = (strpos($busq, 'menuadmin') === false) ? $busq : null; 		
		$this->set('busq',$busq);
 		$this->permisos_menu_individual('liquidacion'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA
		$total=$this->Liquidacion->find('count',array('conditions'=> array("Liquidacion.id >"=>'0')));
		$data=$this->Liquidacion->find('all',array('conditions'=> array("Liquidacion.id >"=>'0'),'limit'=>MAX_PAGI));
		if($total>MAX_PAGI) $mos=MAX_PAGI;
		else $mos=$total;
		$this->set('data',$data);
		$this->Vista->title('Listado de Liquidaciones Encontradas (Mostrando '.$mos.' de '.$total.' Registros Encontrados)');
		//$this->log(1);
	}

	function lista_silo(){
		/*$codigo= $this->Silo->find('list',array('fields'=>'Silo.id, Silo.nombre','conditions'=>array('Silo.estatus'=>1)));
		return $codigo;*/
		return $this->Listas->lista_silo();
	}
	function lista_rubro(){
		/*$codigo= $this->Rubro->find('list',array('fields'=>'Rubro.id, Rubro.nombre','conditions'=>array('Rubro.estatus'=>1)));
		return $codigo;*/
		return $this->Listas->lista_rubro();
	}
	function lista_relacion($estatus=array(1)){
		/*$codigo= $this->Relacion->find('list',array('fields'=>'Relacion.id, Relacion.numero','conditions'=>array('Relacion.estatus'=>$estatus),'order'=>'Relacion.id Desc'));
		return $codigo;*/
		return $this->Listas->lista_relacion();
	}
	function lista_forma(){
		/*$codigo= $this->Forma->find('list',array('fields'=>'Forma.id, Forma.nombre','conditions'=>array('Forma.estatus'=>1,'Forma.id >'=>0)));
		$codigo[0]="NO APLICA";
		return $codigo;*/
		return $this->Listas->lista_forma();
	}
	function lista_bancos(){
		/*$codigo= $this->Banco->find('list',array('fields'=>'Banco.id, Banco.nombre','conditions'=>array('Banco.estatus'=>1,'Banco.id >'=>0)));
		$codigo[0]="NO APLICA";
		return $codigo;*/
		return $this->Listas->lista_bancos();
	}
	function lista_estatus(){
		
		/*$codigo[-1]='ANULADA';
		$codigo[1]='PENDIENTE';
		$codigo[2]='CANCELADA';
		return $codigo;*/
		return $this->Listas->lista_estatus();
	}
	public function nuevo()
	{	
		$this->permisos_accion_individual('liquidacion','nuevo'); // mensaje que se quiere mostrar
		$this->set('lista_silo',$this->lista_silo());
		$this->set('lista_rubro',$this->lista_rubro());
		$this->set('lista_tienda',$this->Utilitario->lista_tienda());
		$this->set('tipo_usuario',$this->Interfaz->id($this->Session->read('tipo_usuario')));
		$this->set('lista_estados',$this->Utilitario->lista_estados());
		$this->set('lista_relacion',$this->lista_relacion());
	}

	public function buscador_productor() 
	{
		$this->set('div','cedula');
		$this->set('divlistado',DOCULTO);
	}

	public function listado_buscador_productor($vent=null,$div=null,$para=null) 
	{
		if(isset($para) && !empty($para))
		{
			$this->set('data',$this->Productor->find('all',array('conditions'=> array("Productor.id >"=>'0',"OR"=>array('Productor.nombre ilike'=>"%$para%",'Productor.ced_rif ilike'=>"%$para%")),'order'=>'Productor.ced_rif,Productor.nombre')));
			$this->set('busq',$para);
		}
		else
		{
			$this->set('data',null);
			$this->set('busq','');
		}
		echo "<script type='text/javascript'>document.getElementById('$div').style.display='block';</script>";
		$this->set('vent',$vent);
	}

	public function seleccionar_productor($vent=null,$id=null,$rubro_id=null){
		if(isset($vent) && isset($id)){
			$id=$this->Interfaz->id($id);
			$d=$this->Productor->find('first',array('conditions'=> array("Productor.id"=>$id)));
			$deuda= $this->Interfaz->miles($this->Deuda->deuda_del_productor($id),2);
			echo "<script type='text/javascript'>
					document.getElementById('productor_id').value='".$d['Productor']['id']."';
					document.getElementById('ced_rif').value='".$this->Interfaz->cedulaguion($d['Productor']['ced_rif'])."';
					document.getElementById('nombre').value='".$d['Productor']['nombre']."';
					document.getElementById('deuda').value='".$deuda."';
				</script>";
			$this->limpia_totales(1);
			$this->Vista->cerrar_ventana($vent);
		}
		$this->render("../".PRINCIPAL."/mensajes");
	}

	public function dato_productor($cedrif=null){
		if(isset($cedrif)){
			$cedrif=$this->Interfaz->cedula_formateada($this->Utilitario->mayuscula($cedrif));
			$d=$this->Productor->find('first',array('conditions'=> array("Productor.ced_rif"=>$cedrif)));
			if(isset($d['Productor']['id']) && $d['Productor']['id'] > 0){
				$deuda= $this->Interfaz->miles($this->Deuda->deuda_del_productor($d['Productor']['id']),2);
				echo "<script type='text/javascript'>
					document.getElementById('productor_id').value='".$d['Productor']['id']."';
					document.getElementById('ced_rif').value='".$this->Interfaz->cedulaguion($d['Productor']['ced_rif'])."';
					document.getElementById('nombre').value='".$d['Productor']['nombre']."';
					document.getElementById('deuda').value='".$deuda."';
				</script>";
			}
			else{
				echo "<script type='text/javascript'>
					document.getElementById('productor_id').value='0';
					document.getElementById('productor_id').value='';
					document.getElementById('nombre').value='';
					document.getElementById('deuda').value='0';
				</script>";
			}
			$this->limpia_totales(1);
		}
		$this->render("../".PRINCIPAL."/mensajes");
	}

	public function buscar_subsidio($id_r=null) {
		if(isset($id_r) && $id_r>0){
			$data= $this->Subsidio->Find('first',array('conditions'=> array("Subsidio.rubro_id"=>$id_r,"Subsidio.estatus"=>1)));
		}
		else{
			$data=null;
		}
		$this->set('data',$data);
		$this->limpia_totales(1);
		echo "<script type='text/javascript'>
					document.getElementById('resultado_sele').innerHTML='&nbsp;';
				</script>";
		//$this->log(1);
	}

	public function limpia_totales($render=0) {
		echo "<script type='text/javascript'>
					if(document.getElementById('monto_arrime')!=null) document.getElementById('monto_arrime').value='0,00';
					if(document.getElementById('monto_exedente')!=null) document.getElementById('monto_exedente').value='0,00';
					if(document.getElementById('monto_subsidio')!=null) document.getElementById('monto_subsidio').value='0,00';
					if(document.getElementById('descuento_subsidio')!=null) document.getElementById('descuento_subsidio').value='0,00';
					if(document.getElementById('liquidacion')!=null) document.getElementById('liquidacion').value='0,00';
			</script>";
			if($render==0) $this->render("../".PRINCIPAL."/mensajes");
	}

	public function calcular_liquidacion($productor_id=null,$rubro_id=null,$arrime=null,$flete=0,$render=0){
		if(isset($productor_id) && $productor_id>0){
			if(isset($rubro_id) && $rubro_id>0){
				if(isset($arrime) && $arrime>0){
					if(strpos($arrime,',')) $arrime=$this->Interfaz->miles_postgres($arrime);
					if(strpos($flete,',')) $flete=$this->Interfaz->miles_postgres($flete);
					$res=$this->calcular_liquidacion_interno($productor_id,$rubro_id,$arrime,$flete);
					echo "<script type='text/javascript'>					
					document.getElementById('monto_arrime').value='".$this->Interfaz->miles($res['mon_a'],2)."';
					document.getElementById('monto_exedente').value='".$this->Interfaz->miles($res['mon_e'],2)."';
					document.getElementById('monto_subsidio').value='".$this->Interfaz->miles($res['mon_s'],2)."';
					document.getElementById('descuento_subsidio').value='".$this->Interfaz->miles($res['mon_des_sub'],2)."';
					document.getElementById('liquidacion').value='".$this->Interfaz->miles($res['total'],2)."';
					</script>";
				}
				else{
					$this->Vista->mensaje('Debes Indicar los kilogramos arrimados por el productor','ERROR','arrime');
				}
			}
			else{
				$this->Vista->mensaje('Debes Indicar el Rubro','ERROR','rubro_id');
			}
		}
		else{
			$this->Vista->mensaje('Debes Indicar el productor','ERROR','ced_rif');
		}
		if($render==0) $this->render("../".PRINCIPAL."/mensajes");
	}

	public function guardar() {
		$this->permisos_accion_individual('liquidacion','nuevo'); // mensaje que se quiere mostrar
		$data=$this->request->data;
		if(!$this->Vista->empyt($data,array('deuda','relacion_id'))){
			$ban=1;$des_deuda="";$des_monto="";
			extract($data);
			$deuda=$this->Deuda->deuda_del_productor($productor_id);
			$rubro= $this->Subsidio->Find('first',array('fields'=>array('Subsidio.id','Subsidio.precio','Subsidio.subsidio','Subsidio.max_subsidio'),'conditions'=> array("Subsidio.rubro_id"=>$rubro_id)));
			$subsidio_id=$rubro['Subsidio']['id'];
			$max=$rubro['Subsidio']['max_subsidio'];
			if(strpos($arrime,',')) $arrime=$this->Interfaz->miles_postgres($arrime);
			if(strpos($descuento,',')) $descuento=$this->Interfaz->miles_postgres($descuento);
			$res=$this->calcular_liquidacion_interno($productor_id,$rubro_id,$arrime,$descuento);
			$deudas= $this->Deuda->find('all',array('fields'=>array('Deuda.actual','Deuda.id'),'conditions'=>array('Deuda.productor_id'=>$productor_id,'Deuda.estatus'=>1),'order'=>'Deuda.id'));
			$disponible=$res['mon_a']+$res['mon_s']-$this->Interfaz->miles_postgres($descuento);
			$this->Liquidacion->query('BEGIN WORK');
			$des_arri_real=0;
			for($j=0;$j<count($deudas);$j++){
				$quitar= ($disponible>=$deudas[$j]['Deuda']['actual']) ? $deudas[$j]['Deuda']['actual'] : $disponible;
				$actual['Deuda']['id']=$deudas[$j]['Deuda']['id'];
				$actual['Deuda']['estatus']=($disponible>=$deudas[$j]['Deuda']['actual']) ? 2 : 1;
				$actual['Deuda']['actual']= $deudas[$j]['Deuda']['actual'] - $quitar;
				$disponible-=$quitar;
				$des_arri_real+=$quitar;
				if($this->Deuda->saveall($actual)){
					$des_deuda.= $deudas[$j]['Deuda']['id'].",";
					$des_monto.= $quitar.",";
					$ban*=1;
				}
				else{
					$ban=0;
				}
				if($disponible <=0) break;
				if($ban <=0) break;
			}
			if($ban){
				if($des_deuda==""){$des_deuda=",";$des_monto=",";}	
				$dPro['Liquidacion']['rubro_id']=$rubro_id;
				$dPro['Liquidacion']['usuario_id']=$this->Interfaz->id($this->Session->read('usuario_id'));
				$dPro['Liquidacion']['productor_id']=$productor_id;
				$dPro['Liquidacion']['tienda_id']=$tienda_id;
				$dPro['Liquidacion']['silo_id']=$silo_id;
				$dPro['Liquidacion']['subsidio_id']=$subsidio_id;
				$dPro['Liquidacion']['relacion_id']=$relacion_id;
				$dPro['Liquidacion']['estado_id']=$estado_id;
				$dPro['Liquidacion']['factura']=$this->Interfaz->mayuscula($factura);
				$dPro['Liquidacion']['fecha_factura']=$this->Utilitario->guar_fecha($$fecha);
				$dPro['Liquidacion']['peso']=$arrime;
				$dPro['Liquidacion']['monto_arrime']=$res['mon_a'];
				$dPro['Liquidacion']['monto_subsidio']=$res['mon_s'];
				$dPro['Liquidacion']['maximo_subsidio']=$max;
				$dPro['Liquidacion']['descuento_arrime']=$des_arri_real;
				$dPro['Liquidacion']['descuento_subsidio']=$res['mon_des_sub'];
				$dPro['Liquidacion']['descuentos']=$descuento;
				$dPro['Liquidacion']['deuda']=$deuda;
				$dPro['Liquidacion']['total']=$res['total'];
				$dPro['Liquidacion']['deudas_cobradas']=substr($des_deuda,0,-1);
				$dPro['Liquidacion']['montos_cobrados']=substr($des_monto,0,-1);
				if($this->Liquidacion->save($dPro)){
					$data_boleta = $this->Boleta->boletas_datos_del_productor($productor_id, $rubro_id);
					$boletas=array();
					foreach ($data_boleta as $boleta) {
						$id_boleta=$boleta['Boleta']['id'];
						$n1= "boleta_$id_boleta";
						if(isset($$n1) && $$n1 > 0){
							$boletas[]=$id_boleta;
						}
					}
					$boletas[]=0;
					$boletas_final = implode(",", $boletas);
					$sql="update boletas set estatus=3, liquidacion_id = {$this->Liquidacion->id} where id in ($boletas_final);";
					
					$this->Liquidacion->query($sql);
					$this->Liquidacion->query('COMMIT');
					$this->log();
					$this->Vista->cerrar_ventana($vent_nuevo);
					$this->Vista->mensaje("Liquidacion Guardada Exitosamente!!!",'EXITO');
				}
				else{
					$this->Vista->mensaje("Ocurrio un error Guardando Liquidacion",'ERROR');
					$this->Liquidacion->query('ROLLBACK');	
				}	
			}
			else{
				$this->Vista->mensaje("Ocurrio un error actualizando deudas",'ERROR');
				$this->Liquidacion->query('ROLLBACK');	
			}			
		}
		$this->listado_liquidacion();
		$this->render('listado_liquidacion');
	}

	public function calcular_liquidacion_interno($productor_id,$rubro_id,$arrime,$flete=0){
		$deuda=$this->Deuda->deuda_del_productor($productor_id);
		$rubro= $this->Subsidio->Find('first',array('fields'=>array('Subsidio.precio','Subsidio.subsidio','Subsidio.max_subsidio'),'conditions'=> array("Subsidio.rubro_id"=>$rubro_id)));
		$mon_a=$rubro['Subsidio']['precio']*$arrime;
		$mon_e=$mon_a - ($deuda+$flete);
		$mon_s=$rubro['Subsidio']['subsidio']*$arrime;
		$max_des= $mon_s*$rubro['Subsidio']['max_subsidio']/100;
		if($mon_e < 0){
			$mon_des_sub= (($mon_e*-1) > $max_des) ? $max_des : ($mon_e*-1);
			$deuda=$mon_a;
		}
		else $mon_des_sub=0;
		$total= ($mon_a+$mon_s)-($deuda+$flete+$mon_des_sub);
		$res=array('mon_a'=>$mon_a,'mon_e'=>$mon_e,'mon_s'=>$mon_s,'mon_des_sub'=>$mon_des_sub,'total'=>$total);
		return $res;	
	}
	
	public function nueva_deuda($id_productor=null) {
		if(isset($id_productor) && $id_productor != 0){
			$d=$this->Productor->find('first',array('conditions'=> array("Productor.id"=>$id_productor)));
			$deuda= $this->Interfaz->miles($this->Deuda->deuda_del_productor($id_productor),2);
			$this->set('produ',$d);
			$this->set('deuda',$deuda);
		}
		else{
			$this->Vista->mensaje("Debes Indicar el productor!!!",'INFORMACION','ced_rif');
			$this->render("../".PRINCIPAL."/mensajes");
		}
	}

	public function guardar_deuda() {
		$this->permisos_accion_individual('liquidacion','nuevo'); // mensaje que se quiere mostrar
		$data=$this->request->data;
		if(!$this->Vista->empyt($data,array('deuda'))){
			extract($data);
			$this->Deuda->query('BEGIN WORK');
			$dPro['Deuda']['monto']=$this->Interfaz->miles_postgres($monto_nueva_deuda);
			$dPro['Deuda']['usuario_id']=$this->Interfaz->id($this->Session->read('usuario_id'));
			$dPro['Deuda']['productor_id']=$productor_id_deuda_liq;
			$dPro['Deuda']['actual']=$this->Interfaz->miles_postgres($monto_nueva_deuda);

			if($this->Deuda->save($dPro)){
				$this->Vista->mensaje("Deuda Guardada Exitosamente!!!",'EXITO');
				$this->Deuda->query('COMMIT');
				$deuda= $this->Interfaz->miles($this->Deuda->deuda_del_productor($productor_id_deuda_liq),2);
				echo "<script type='text/javascript'>
					document.getElementById('deuda').value='$deuda';
					</script>";
				$this->limpia_totales(1);
				$this->log();
				$this->Vista->cerrar_ventana($vent_nuevo_deuda_liquidacion);
			}
			else{
				$this->Vista->mensaje("Ocurrio un error Guardando deuda",'ERROR','ced_rif');
				$this->Deuda->query('ROLLBACK');	
			}			
		}
		$this->render("../".PRINCIPAL."/mensajes");
	}

	public function anular($id=null)
	{
		$this->permisos_opcion_individual('liquidacion','estatus','anular');
		if(isset($id)){
			$id=$this->Interfaz->id($id);
			$datos=$this->Liquidacion->find('first',array('fields'=>array('Liquidacion.id','Liquidacion.deudas_cobradas','Liquidacion.montos_cobrados'),'conditions'=>array('Liquidacion.id'=>$id)));
			if(isset($datos['Liquidacion']['id'])){
				$ids=explode(',', $datos['Liquidacion']['deudas_cobradas']);
				$montos=explode(',', $datos['Liquidacion']['montos_cobrados']);				
				$this->Liquidacion->query('BEGIN WORK');
				$ban=1;
				for($j=0;$j< count($ids);$j++){
					$id_deuda=$ids[$j];
					$monto=$montos[$j];
					$de=$this->Deuda->find('first',array('fields'=>array('Deuda.actual'),'conditions'=>array('Deuda.id'=>$id_deuda)));
					$actual=$de['Deuda']['actual'];
					$deuda['Deuda']['id']=$id_deuda;
					$deuda['Deuda']['estatus']=1;
					$deuda['Deuda']['actual']=$actual+$monto;
					if($this->Deuda->saveall($deuda)){
						$ban*=1;
					}
					else{
						$ban=0;
					}
					if($ban==0) break;
				}
				if($ban==1){
					$data['Liquidacion']['id']=$id;
					$data['Liquidacion']['estatus']=0;
					if($this->Liquidacion->save($data)){
						$sql="update boletas set estatus=1, liquidacion_id = 0 where liquidacion_id = $id;";
						$this->Liquidacion->query($sql);
						$this->log();
						$this->Vista->mensaje("Liquidacion Anulada Exitosamente",'Exito');
					}
					else{
						$this->Vista->mensaje("Ocurrio un error Anulando Liquidacion",'ERROR');
						$ban=0;
					}
				}
				else{
					$this->Vista->mensaje("Ocurrio un error Actualizando Deudas",'ERROR');
				}
			}
			else{
				$this->Vista->mensaje("Estas intentando violar la seguridad agropatria",'ERROR');
				$ban=0;
			}
			if($ban==1) $this->Liquidacion->query('COMMIT');
			else $this->Liquidacion->query('ROLLBACK');
			
		}
		$this->listado_liquidacion();
		$this->render('listado_liquidacion');
	}

	public function pagar($id=null) {
		$this->permisos_opcion_individual('liquidacion','estatus','pagar');
		if(isset($id)){
			$id=$this->Interfaz->id($id);
			$datos=$this->Liquidacion->find('first',array('fields'=>array('Rubro.nombre','Liquidacion.total','Liquidacion.peso','Liquidacion.factura','Liquidacion.id','Liquidacion.monto_arrime','Liquidacion.monto_subsidio','Liquidacion.monto_subsidio','Liquidacion.descuento_arrime','Liquidacion.descuento_subsidio','Liquidacion.descuentos','Productor.ced_rif','Productor.nombre'),'conditions'=>array('Liquidacion.id'=>$id)));
			if(isset($datos['Liquidacion']['id'])){
				$this->set('data',$datos);
				$this->set('lista_forma',$this->lista_forma());
				$this->set('lista_bancos',$this->lista_bancos());
			}
			else{
				$this->Vista->mensaje("Estas intentando violar la seguridad agropatria",'ERROR');
				$this->render("../".PRINCIPAL."/mensajes");
			}			
		}
		else{
			$this->Vista->mensaje("Debes Indicar la Liquidacion!!!",'INFORMACION');
			$this->render("../".PRINCIPAL."/mensajes");
		}
	}

	public function guardar_pago()
	{
		$this->permisos_opcion_individual('liquidacion','estatus','pagar');
		$data=$this->request->data;
		if(!$this->Vista->empyt($data,array('todo'))){
			extract($data);
			$this->Liquidacion->query('BEGIN WORK');
			$pa['Pago']['fecha_cheque']=$this->Utilitario->guar_fecha($$fecha);
			$pa['Pago']['cheques']=$documento;
			$pa['Pago']['banco_id']=$banco_id;
			$pa['Pago']['forma_id']=$forma_id;
			$pa['Pago']['monto']=$this->Interfaz->miles_postgres($monto_deuda_mostrar);
			if($this->Pago->save($pa)){
				$d['Liquidacion']['id']=$liquidacion_id;
				$d['Liquidacion']['estatus']=2;
				if($this->Liquidacion->save($d)){
					$this->Liquidacion->query('COMMIT');	
					$this->log();	
					$this->Vista->cerrar_ventana($vent_pagar_);			
					$this->Vista->mensaje("Pago Guardado Exitosamente!!!",'EXITO');
				}
				else{
					$this->Vista->mensaje("Ocurrio un error Guardando Liquidacion",'ERROR');
					$this->Liquidacion->query('ROLLBACK');	
				}
			}
			else{
				$this->Vista->mensaje("Ocurrio un error Guardando Pago",'ERROR');
				$this->Liquidacion->query('ROLLBACK');	
			}
		}
		$this->listado_liquidacion();
		$this->render('listado_liquidacion');
	}

	public function nuevo_banco() {
	}

	public function guardar_banco() {
		$data=$this->request->data;
		if(!$this->Vista->empyt($data)){
			extract($data);
			$this->Banco->query('BEGIN WORK');
			$d['Banco']['nombre']=$this->Utilitario->mayuscula($nombre_banco);
			if($this->Banco->save($d)){
				$this->Vista->mensaje("Banco Guardado Exitosamente!!!",'EXITO');
				$this->Banco->query('COMMIT');
				$this->set('id_banco',$this->Banco->id);
				$this->log();
				$this->Vista->cerrar_ventana($vent_nuevo_banco);
			}
			else{
				$this->Vista->mensaje("El Banco ya Existe",'ERROR');
				$this->Banco->query('ROLLBACK');	
			}			
		}
		$this->set('lista_bancos',$this->lista_bancos());
	}

	public function ver_dato_liquidacion($id=null) {
		$this->permisos_opcion_individual('liquidacion','estatus','ver');
		if(isset($id)){
			$id=$this->Interfaz->id($id);
			$datos=$this->Liquidacion->find('first',array('conditions'=>array('Liquidacion.id'=>$id)));
			if(isset($datos['Liquidacion']['id'])){
				$this->set('data',$datos);
				$this->set('lista_silo',$this->lista_silo());
				$this->set('lista_rubro',$this->lista_rubro());
				$this->set('lista_tienda',$this->Utilitario->lista_tienda());
				$this->set('tipo_usuario',$this->Interfaz->id($this->Session->read('tipo_usuario')));
				$this->set('lista_estados',$this->Utilitario->lista_estados());
				$this->set('lista_relacion',$this->lista_relacion());
			}
			else{
				$this->Vista->mensaje("Estas intentando violar la seguridad agropatria",'ERROR');
				$this->render("../".PRINCIPAL."/mensajes");
			}			
		}
		else{
			$this->Vista->mensaje("Debes Indicar la Liquidacion!!!",'INFORMACION');
			$this->render("../".PRINCIPAL."/mensajes");
		}
	}

	public function modificar_subsidio($id=null) {
		$this->permisos_opcion_individual('liquidacion','estatus','modificar');
		if(isset($id)){
			$id=$this->Interfaz->id($id);
			$datos=$this->Liquidacion->find('first',array('conditions'=>array('Liquidacion.id'=>$id)));
			if(isset($datos['Liquidacion']['id'])){
				$this->set('data',$datos);
				$this->set('lista_silo',$this->lista_silo());
				$this->set('lista_rubro',$this->lista_rubro());
				$this->set('lista_tienda',$this->Utilitario->lista_tienda());
				$this->set('tipo_usuario',$this->Interfaz->id($this->Session->read('tipo_usuario')));
				$this->set('lista_estados',$this->Utilitario->lista_estados());
				$this->set('lista_relacion',$this->lista_relacion());
				$this->set('lista_subsidio',$this->Utilitario->lista_numeros(1,101,1));
			}
			else{
				$this->Vista->mensaje("Estas intentando violar la seguridad agropatria",'ERROR');
				$this->render("../".PRINCIPAL."/mensajes");
			}			
		}
		else{
			$this->Vista->mensaje("Debes Indicar la Liquidacion!!!",'INFORMACION');
			$this->render("../".PRINCIPAL."/mensajes");
		}
	}

	public function listado_relacion($busq=null){
		$busq = (strpos($busq, 'menuadmin') === false) ? $busq : null; 		 		
		$this->set('busq',$busq);
 		$this->permisos_menu_individual('relacion');
		$total=$this->Relacion->find('count',array('conditions'=> array("Relacion.id >"=>'0')));
		$data=$this->Relacion->find('all',array('conditions'=> array("Relacion.id >"=>'0'),'order'=>'Relacion.id desc','limit'=>MAX_PAGI));
		if($total>MAX_PAGI) $mos=MAX_PAGI;
		else $mos=$total;
		$this->set('data',$data);
		$this->Vista->title('Listado de Relaciones Encontradas (Mostrando '.$mos.' de '.$total.' Registros Encontrados)');
		//$this->log(1);
	}

	public function nuevo_relacion() 
	{	
		$this->permisos_accion_individual('relacion','nuevo'); // mensaje que se quiere mostrar
		$total=$this->Relacion->find('count',array('conditions'=> array("Relacion.id >"=>'0')));
		$this->set('numero',($total+1));
	}

	public function guardar_relacion() {
		$this->permisos_accion_individual('relacion','nuevo'); // mensaje que se quiere mostrar
		$data=$this->request->data;
		if(!$this->Vista->empyt($data)){
			extract($data);
			$this->Deuda->query('BEGIN WORK');
			$d['Relacion']['numero']=$numero;
			$d['Relacion']['descripcion']=$this->Utilitario->mayuscula($descripcion);
			if($this->Relacion->save($d)){
				$this->Relacion->query('COMMIT');
				$this->log();
				$this->Vista->cerrar_ventana($vent_nuevo_deuda_liquidacion);		
				$this->Vista->mensaje("Relacion Guardada Exitosamente!!!",'EXITO');
			}
			else{
				$this->Vista->mensaje("Ocurrio un error Guardando Relacion",'ERROR');
				$this->Relacion->query('ROLLBACK');	
			}			
		}
		else{
			$this->Vista->mensaje("Faltan datos requeridos",'ERROR');	
		}
		$this->listado_relacion();
		$this->render('listado_relacion');
	}

	
	public function ver_datos_relacion($ver=1,$id=null)
	{
		if($ver==1) $this->permisos_opcion_individual('relacion','estatus','ver');
		else $this->permisos_opcion_individual('relacion','estatus','modificar');
		$id=$this->Interfaz->id($id);
		if(is_numeric($id)){
			$data= $this->Relacion->find('first', array('conditions'=>array('Relacion.id'=> $id)));
			$this->set('data',$data);$this->set('ver',$ver);
		}
		else{
			$tnis->vista->mensaje("estas tratando de violar la seguridad de agropatria","ERROR");
			$this->render("../".PRINCIPAL."/mensajes");
		}
	}

	public function modificar_relacion() {
		$this->permisos_opcion_individual('relacion','estatus','modificar'); // mensaje que se quiere mostrar
		$data=$this->request->data;
		if(!$this->Vista->empyt($data,array('telf'))){
			extract($data);
			$id_pro=$this->Interfaz->id($id_relacion);
			if(is_numeric($id_pro)){				
				if(!$this->Vista->verifica('Relacion','numero',$numero,'numero',$id_pro)){
					$this->Relacion->query('BEGIN WORK');
					$dPro['Relacion']['id']=$id_pro;
					$dPro['Relacion']['numero']=$numero;
					$dPro['Relacion']['descripcion']=$this->Interfaz->mayuscula($descripcion);
					
					if($this->Relacion->save($dPro)){
						$this->Vista->mensaje("Relacion Guardada Exitosamente!!!",'EXITO');
						$this->Relacion->query('COMMIT');
						$this->log();
						$this->Vista->cerrar_ventana($vent_edit_relacion);
					}
					else{
						$this->Vista->mensaje("Ocurrio un error Guardando Relacion",'ERROR','ced_rif');
						$this->Relacion->query('ROLLBACK');	
					}	
				}	
			}
			else{
				$this->Vista->mensaje("Estas tratando de violar la seguridad agropatria!!!",'ERROR');
			}		
		}
		else{
			$this->Vista->mensaje("Faltan datos requeridos!!!",'ERROR');
		}
		$this->listado_relacion();
		$this->render("listado_relacion");
	}

	public function cambiar_estatus_relacion($id=null,$esta=1)
	{
		$this->permisos_opcion_individual('productor','estatus','eliminar');
		if(isset($id)){
			$id=$this->Interfaz->id($id);
			if(is_numeric($id)){
				$data= $this->Relacion->find('first', array('conditions'=>array('Relacion.id'=> $id)));
				$esta= ($data['Relacion']['estatus']==1) ? 0 : 1;
				$msj= ($data['Relacion']['estatus']==1) ? 'Inactivado' : 'Activado';
				$pro['Relacion']['id']=$id;
				$pro['Relacion']['estatus']=$esta;
				if($this->Relacion->save($pro)){
					$this->Vista->mensaje("Relacion  $msj Exitosamente!!!",'EXITO');
					$this->Relacion->query('COMMIT');
					$this->set('esta',$esta);
					$this->log();
					//$this->Vista->cerrar_ventana($vent_nuevo_deuda);
				}
				else{
					$this->Vista->mensaje("Ocurrio un error Guardando Relacion",'ERROR','ced_rif');
					$this->Relacion->query('ROLLBACK');	
				}
			}
			else{
				$tnis->vista->mensaje("estas tratando de violar la seguridad de agropatria","ERROR");
				$this->render("../".PRINCIPAL."/mensajes");
			}
		}
		else{
			$tnis->vista->mensaje("estas tratando de violar la seguridad de agropatria","ERROR");
			$this->render("../".PRINCIPAL."/mensajes");
		}	
	}

	public function filtrado_liquidaciones() {
		$this->permisos_accion_individual('liquidacion','filtro'); // mensaje que se quiere mostrar
		$this->set('lista_silo',$this->lista_silo());
		$this->set('lista_rubro',$this->lista_rubro());
		$this->set('lista_tienda',$this->Utilitario->lista_tienda());
		$this->set('lista_relacion',$this->lista_relacion(array(0,1)));
		$this->set('lista_estatus',$this->lista_estatus());

	}

	public function listado_filtrado_liquidaciones() {
		$data=$this->request->data;
		$busq='';
		$this->set('opciones',$this->serializador($data,2));
		extract($data);
		$condiciones['Liquidacion.id >']=0;
		if(!empty($$fecha_i))
		{
			$vfi=$this->Utilitario->guar_fecha($$fecha_i);		
			if(empty($$fecha_f)){ $vff=$vfi; }
			else if(!empty($$fecha_f)){ $vff=$this->Utilitario->guar_fecha($$fecha_f);}
			if($this->diferencias_dias($vfi,$vff)<0){
				$a=$vfi;
			 	$vfi=$vff;
				$vff=$a;
			}
			$condiciones['Liquidacion.fecha BETWEEN ? AND ?']=array($vfi,$vff);
		}
		if(!empty($relacion_id) ){ $condiciones['Liquidacion.relacion_id']=$relacion_id;}
		if(!empty($rubro_id) && $rubro_id>0 ){ $condiciones['Liquidacion.rubro_id']=$rubro_id;}
		if(!empty($silo_id) && $silo_id>0 ){ $condiciones['Liquidacion.silo_id']=$silo_id;}
		if(!empty($tienda_id) && $tienda_id>0 ){ $condiciones['Liquidacion.tienda_id']=$tienda_id;}
		if(!empty($cedrif) ){ $condiciones['Productor.ced_rif ilike ']="%$cedrif%"; $busq=$cedrif;}
		if(!empty($nombre) ){ $condiciones['Productor.nombre ilike ']="%$nombre%"; $busq=$nombre;}
		if(!empty($estatus) ){ if($estatus<0) $estatus=0;$condiciones['Liquidacion.estatus']=$estatus;}
		$this->permisos_menu_individual('liquidacion');
		$total = $this->Liquidacion->find('count',array('conditions'=> $condiciones));
		$data = $this->Liquidacion->find('all',array('conditions'=> $condiciones,'limit'=>MAX_PAGI));
		if($total>MAX_PAGI) $mos = MAX_PAGI;
		else $mos = $total;
		if($mos>0) $this->Vista->cerrar_ventana($vent_filtro);
		$this->set('data',$data); $this->set('busq',$busq);
		$this->Vista->title('Listado de Liquidaciones Encontradas (Mostrando '.$mos.' de '.$total.' Registros Encontrados)');
	}

	public function reporte_excel_liquidaciones($tipo,$busq=null){
		$busq = (strpos($busq, 'menuadmin') === false) ? $busq : null; 
		if(empty($busq)){
			$data = $this->Liquidacion->find('all',array('conditions'=> array("Liquidacion.id >"=>'0'),'limit'=>2000));
		} else {
			$data = $this->_principal_buscador_reporte('Liquidacion',$busq);
		}
		foreach ($data as $valores) {
			$boletas[$valores['Liquidacion']['id']]=$this->Boleta->find('all',array('conditions'=>array('Boleta.liquidacion_id'=>$valores['Liquidacion']['id'])));
		}
		$this->set('busq',$busq);
		$this->set('tipo',$tipo);
		$this->set('boletas',$boletas);
		$this->set('data',$data);
		$this->render('reporte_excel_filtrado_liquidaciones');
		
	}

	public function reporte_excel_filtrado_liquidaciones($tipo,$opciones) 
	{
		$this->set('tipo',$tipo);
		$data=$this->serializador($opciones,1); //1 convierte la cadena serializada en un arreglo
		if(is_array($data))
		{
			extract($data);
			$condiciones['Liquidacion.id >']=0;
			if(!empty($$fecha_i))
			{
				$vfi=$this->Utilitario->guar_fecha($$fecha_i);		
				if(empty($$fecha_f)){ $vff=$vfi; }
				else if(!empty($$fecha_f)){ $vff=$this->Utilitario->guar_fecha($$fecha_f);}
				if($this->diferencias_dias($vfi,$vff)<0){
					$a=$vfi;
				 	$vfi=$vff;
					$vff=$a;
				}
				$condiciones['Liquidacion.fecha BETWEEN ? AND ?']=array($vfi,$vff);
			}
			if(!empty($relacion_id) ){ $condiciones['Liquidacion.relacion_id']=$relacion_id;}
			if(!empty($rubro_id) && $rubro_id>0 ){ $condiciones['Liquidacion.rubro_id']=$rubro_id;}
			if(!empty($silo_id) && $silo_id>0 ){ $condiciones['Liquidacion.silo_id']=$silo_id;}
			if(!empty($tienda_id) && $tienda_id>0 ){ $condiciones['Liquidacion.tienda_id']=$tienda_id;}
			if(!empty($cedrif) ){ $condiciones['Productor.ced_rif ilike ']="%$cedrif%"; $busq=$cedrif;}
			if(!empty($nombre) ){ $condiciones['Productor.nombre ilike ']="%$nombre%"; $busq=$nombre;}
			if(!empty($estatus) ){ if($estatus<0) $estatus=0;$condiciones['Liquidacion.estatus']=$estatus;}
			$data=$this->Liquidacion->find('all',array('conditions'=> $condiciones));
			foreach ($data as $valores) {
				$boletas[$valores['Liquidacion']['id']]=$this->Boleta->find('all',array('conditions'=>array('Boleta.liquidacion_id'=>$valores['Liquidacion']['id'])));
			}
			$this->set('boletas',$boletas);
			$this->set('data',$data);
				
		}
		else
		{
			echo "ESTAS INTENTANDO VIOLAR LA SEGURIDAD AGROPATRIA";
		}
	}

	function recalcular_liquidacion($productor_id,$pre,$sub,$peso,$deuda,$descuento,$por_sub)
	{
		$res=$this->recalcular_liquidacion_interno($productor_id,$pre,$sub,$peso,$deuda,$descuento,$por_sub);
		echo "<script type='text/javascript'>					
		document.getElementById('monto_arrime_nue').value='".$this->Interfaz->miles($res['mon_a'],2)."';
		document.getElementById('descuento_arrime_nue').value='".$this->Interfaz->miles($res['mon_e'],2)."';
		document.getElementById('monto_subsidio_nue').value='".$this->Interfaz->miles($res['mon_s'],2)."';
		document.getElementById('descuento_subsidio_nue').value='".$this->Interfaz->miles($res['mon_des_sub'],2)."';
		document.getElementById('liquidacion_nue').value='".$this->Interfaz->miles($res['total'],2)."';
		</script>";
		$this->render("../".PRINCIPAL."/mensajes");
	}

	function guardar_modificar_subsidio(){
		$data=$this->request->data;
		$this->pr($data);
		/*[vent_nuevo] => vent_nue_1534748266
	    [id] => 2
	    [productor_id] => 139
	    [rubro_id] => 4
	    [subsidio_id] => 4
	    [max_subsidio] => 56*/
		$this->listado_liquidacion();
		$this->render('listado_liquidacion');
	}

	function recalcular_liquidacion_interno($productor_id,$pre,$sub,$peso,$deuda,$descuento,$por_sub)
	{
		$deuda2=$this->Deuda->deuda_del_productor($productor_id);
		$deudasum=0;
		$mon_a=$pre*$peso;
		$mon_e=$mon_a - ($deuda+$descuento+$deuda2);
		$mon_s=round($sub*$peso,2);
		$max_des= round($mon_s*$por_sub/100,2);
		if($mon_e < 0){
			$mon_des_sub= (($mon_e*-1) > $max_des) ? $max_des : ($mon_e*-1);
			$deudasum=$mon_a;
		}
		else $mon_des_sub=0;
		$total= ($mon_a+$mon_s)-($deudasum+$descuento+$mon_des_sub);
		$res=array('mon_a'=>$mon_a,'mon_e'=>$mon_e,'mon_s'=>$mon_s,'mon_des_sub'=>$mon_des_sub,'total'=>$total,'deuda'=>$deuda,'des_arrime'=>$deudasum);
		return $res;
	}


	public function cargar_lista_orden($id=null, $rubro=null) {		
		$data = $this->Boleta->boletas_datos_del_productor($id, $rubro);
		$this->set('data',$data);
	}

	public function cargar_orden($cant=null, $id=null) {
		$this->set('cant',($cant+1));
	}

	public function ver_agregar_liquidacion( $id=null){
		$this->permisos_opcion_individual('relacion','estatus','agregar');
		$id=$this->Interfaz->id($id);
		if(is_numeric($id)){			
			$data= $this->Relacion->find('first', array('conditions'=>array('Relacion.id'=> $id)));
			$this->set('data',$data);
			
			$condiciones=array("Liquidacion.relacion_id"=>0, "Liquidacion.estatus"=>1);
			$campos=array("Liquidacion.id", "Liquidacion.factura", "Liquidacion.total", "Liquidacion.fecha_factura", "Productor.nombre", "Rubro.nombre");
			$liq=$this->Liquidacion->find('all',array('conditions'=> $condiciones,'fields'=>$campos));
			$this->set('liq',$liq);
		}
		else{
			$tnis->vista->mensaje("estas tratando de violar la seguridad de agropatria","ERROR");
			$this->render("../".PRINCIPAL."/mensajes");
		}
	}

	public function agregar_liquidacion( ){
		extract($this->request->data);
		$id=$this->Interfaz->id($id_relacion);
		if(is_numeric($id)){			
			$condiciones=array("Liquidacion.relacion_id"=>0, "Liquidacion.estatus"=>1);
			$campos=array("Liquidacion.id");
			$liq=$this->Liquidacion->find('all',array('conditions'=> $condiciones,'fields'=>$campos));
			$ban=0;
			$liquidaciones=array();
			foreach ($liq as $datos) {
				$n1= "liq_{$datos['Liquidacion']['id']}";
				if(isset($$n1)){
					$ban++;
					$liquidaciones[]=$datos['Liquidacion']['id'];
				}
			}
			if($ban>0){
				$ids= implode(',', $liquidaciones);
				$sql="UPDATE liquidacions set relacion_id = $id WHERE id in ($ids);";
				$this->Liquidacion->query($sql);
				$this->Vista->mensaje("Liquidaciones asociadas a la relacion","Exito");
				$this->Vista->cerrar_ventana($vent_agr_relacion);
			} else {
				$this->Vista->mensaje("Debes seleccionar al menos una liquidacion para asociar a la relacion","ERROR");
			}
		}
		else{
			$tnis->vista->mensaje("estas tratando de violar la seguridad de agropatria","ERROR");
		}
			
		$this->listado_relacion();
		$this->render('listado_relacion');
	}
}
